﻿/*
 * Created by SharpDevelop.
 * User: CrOnO
 * Date: 22/11/2011
 * Time: 12:45 a.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data.SqlClient;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using Business_Entity;

namespace DAOFactory
{
	/// <summary>
	/// Description of DAOLineaPedidoVentaServicio.
	/// </summary>
	public class DAOLineaPedidoVentaServicio
	{
		public DAOLineaPedidoVentaServicio()
		{
		}
		
		public int modificarLineaPedidoVentaServicio(BELineaPedidoServicio linea, int hayProxCita)
		{
			int estadoTran = 0;
			
			try
			{				
				SqlCommand cmd = new SqlCommand("SERVICIOS_MODIFICAR_LINEAPEDIDOVENTASERVICIO_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@IDLINEAPEDIDOVENTASERVICIO", SqlDbType.Int);
				cmd.Parameters["@IDLINEAPEDIDOVENTASERVICIO"].Value = linea.Id;
				cmd.Parameters.Add("@IDPEDIDOVENTA", SqlDbType.Int);
				cmd.Parameters["@IDPEDIDOVENTA"].Value = linea.IdPedidoVenta;
				cmd.Parameters.Add("@FECHA", SqlDbType.DateTime);
				cmd.Parameters["@FECHA"].Value = linea.Fecha;
				cmd.Parameters.Add("@OBSERVACION", SqlDbType.VarChar, 500);
				cmd.Parameters["@OBSERVACION"].Value = linea.Observaciones;
				cmd.Parameters.Add("@IDEMPLEADO", SqlDbType.Int);
				cmd.Parameters["@IDEMPLEADO"].Value = linea.Empleado.IdEmpleado;
				cmd.Parameters.Add("@IDESTADO", SqlDbType.Int);
				cmd.Parameters["@IDESTADO"].Value = linea.Estado.IdEstado;
				cmd.Parameters.Add("@PROXIMACITA", SqlDbType.DateTime);
				
				if (hayProxCita == 1)
					cmd.Parameters["@PROXIMACITA"].Value = linea.ProximaCita;
				else
					cmd.Parameters["@PROXIMACITA"].Value = DBNull.Value;
				
			
				cmd.Parameters.Add("@ARCHIVO", SqlDbType.VarBinary);
				cmd.Parameters["@ARCHIVO"].Value = linea.Archivo;
				cmd.Parameters.Add("@NOMARCHIVO", SqlDbType.VarChar, 300);
				cmd.Parameters["@NOMARCHIVO"].Value = linea.NomArchivo;
				
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
					
				cmd.ExecuteNonQuery();
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;
				
			}
			catch (Exception e)
			{
//				System.Windows.Forms.MessageBox.Show("Error al modificar datos","Error");
			}
			
			return estadoTran;
		}


		public int modificarLineaPedidoVentaServicio2(BELineaPedidoServicio linea, int hayProxCita)
		{
			int estadoTran = 0;
			DataTable LineaPedidoVentaServicioDT= this.cargarLineaPedidoVentaServicioDT(linea);
			try
			{				
				SqlCommand cmd = new SqlCommand("SERVICIOS_MODIFICAR_LINEAPEDIDOVENTASERVICIO2_L", ConnectionManager.getConnection());
				cmd.CommandType = CommandType.StoredProcedure;
				
				cmd.Parameters.Add("@lineaPedidoVentaServicioDT", SqlDbType.Structured).Value = LineaPedidoVentaServicioDT;
				
				cmd.Parameters.Add("@IDLINEAPEDIDOVENTASERVICIO", SqlDbType.Int);
				cmd.Parameters["@IDLINEAPEDIDOVENTASERVICIO"].Value = linea.Id;
				cmd.Parameters.Add("@IDPEDIDOVENTA", SqlDbType.Int);
				cmd.Parameters["@IDPEDIDOVENTA"].Value = linea.IdPedidoVenta;
				cmd.Parameters.Add("@FECHA", SqlDbType.DateTime);
				cmd.Parameters["@FECHA"].Value = linea.Fecha;
				cmd.Parameters.Add("@OBSERVACION", SqlDbType.VarChar, 500);
				cmd.Parameters["@OBSERVACION"].Value = linea.Observaciones;
				cmd.Parameters.Add("@IDEMPLEADO", SqlDbType.Int);
				cmd.Parameters["@IDEMPLEADO"].Value = linea.Empleado.IdEmpleado;
				cmd.Parameters.Add("@IDESTADO", SqlDbType.Int);
				cmd.Parameters["@IDESTADO"].Value = linea.Estado.IdEstado;
				cmd.Parameters.Add("@PROXIMACITA", SqlDbType.DateTime);
				
				if (hayProxCita == 1)
					cmd.Parameters["@PROXIMACITA"].Value = linea.ProximaCita;
				else
					cmd.Parameters["@PROXIMACITA"].Value = DBNull.Value;
				
			
				cmd.Parameters.Add("@ARCHIVO", SqlDbType.VarBinary);
				cmd.Parameters["@ARCHIVO"].Value = linea.Archivo;
				cmd.Parameters.Add("@NOMARCHIVO", SqlDbType.VarChar, 300);
				cmd.Parameters["@NOMARCHIVO"].Value = linea.NomArchivo;
				
				cmd.Parameters.Add("@ESTADOTRAN", SqlDbType.Int);
				cmd.Parameters["@ESTADOTRAN"].Direction = ParameterDirection.Output;
					
				cmd.ExecuteNonQuery();
				estadoTran = (int) cmd.Parameters["@ESTADOTRAN"].Value;
				
			}
			catch (Exception e)
			{
//				System.Windows.Forms.MessageBox.Show("Error al modificar datos","Error");
			}
			
			return estadoTran;
		}


        
        
        
        public void actualizarLineaPedidoVentaServicio_clinica(BELineaPedidoServicio lineaPedidoServBE, byte cargoArchivo, ref int error, ref string mensajeError)
        {
            DataTable LineaPedidoVentaServicioDT= this.cargarLineaPedidoVentaServicioDT(lineaPedidoServBE);
            try
            {
                SqlCommand comando = new SqlCommand("VTAS_ACTUALIZAR_LINEA_PEDIDO_VENTA_SERVICIO", ConnectionManager.getConnection());
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.Add("@lineaPedidoVentaServicioDT", SqlDbType.Structured).Value = LineaPedidoVentaServicioDT;
                comando.Parameters.Add("@cargoArchivo", SqlDbType.TinyInt).Value = cargoArchivo;
                comando.Parameters.Add("@error", SqlDbType.Int);
                comando.Parameters["@error"].Direction = ParameterDirection.Output;
                comando.Parameters.Add("@mensajeError", SqlDbType.NVarChar, 200);
                comando.Parameters["@mensajeError"].Direction = ParameterDirection.Output;
                
                comando.ExecuteNonQuery();
                
                error = (int)comando.Parameters["@error"].Value;
                mensajeError = comando.Parameters["@mensajeError"].Value.ToString();
            }
            catch (Exception e)
            {
                error = 1;
                mensajeError = e.Message;
            }
        }






        public DataTable cargarLineaPedidoVentaServicioDT(BELineaPedidoServicio lineaPedidoServBE)
        {
            DataTable lineaPedidoVentaServicioDT = new DataTable("VTAS_DT_LINEA_PEDIDO_VENTA_SERVICIO");
            lineaPedidoVentaServicioDT.Columns.Add("idLineaPedidoVentaServicio", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("idPedidoVenta", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("fecha", System.Type.GetType("System.DateTime"));
            lineaPedidoVentaServicioDT.Columns.Add("observacion", System.Type.GetType("System.String"));
            lineaPedidoVentaServicioDT.Columns.Add("idMascota", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("idEmpleado", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("idEstado", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("idTienda", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("idServicio", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("precio", System.Type.GetType("System.Double"));
            lineaPedidoVentaServicioDT.Columns.Add("idDescuento", System.Type.GetType("System.Int32"));
            lineaPedidoVentaServicioDT.Columns.Add("proximaCita", System.Type.GetType("System.DateTime"));
            lineaPedidoVentaServicioDT.Columns.Add("archivo", System.Type.GetType("System.Byte[]"));
            lineaPedidoVentaServicioDT.Columns.Add("nomArchivo", System.Type.GetType("System.String"));

            DataRow filaTabla;

            filaTabla = lineaPedidoVentaServicioDT.NewRow();
            filaTabla["idLineaPedidoVentaServicio"] = lineaPedidoServBE.Id;
            filaTabla["idPedidoVenta"] = lineaPedidoServBE.IdPedidoVenta;
            filaTabla["fecha"] = lineaPedidoServBE.Fecha;
            filaTabla["observacion"] = lineaPedidoServBE.Observaciones;
            filaTabla["idMascota"] = lineaPedidoServBE.Mascota.Id; //Hay 2 ids. Verificar
            filaTabla["idEmpleado"] = lineaPedidoServBE.Empleado.IdEmpleado;
            filaTabla["idEstado"] = lineaPedidoServBE.Estado.IdEstado;
            //filaTabla["idTienda"] = lineaPedidoServBE.Tienda.Id;
            filaTabla["idServicio"] = lineaPedidoServBE.Servicio.Codigo;
            filaTabla["precio"] = lineaPedidoServBE.Precio;
            //filaTabla["idDescuento"] = lineaPedidoServBE.Descuento.Id;
            filaTabla["proximaCita"] = lineaPedidoServBE.ProximaCita;
            filaTabla["archivo"] = lineaPedidoServBE.Archivo;
            filaTabla["nomArchivo"] = lineaPedidoServBE.NomArchivo;
            lineaPedidoVentaServicioDT.Rows.Add(filaTabla);
            return lineaPedidoVentaServicioDT;
        }







        public void descargarArchivoLineaServicio(BELineaPedidoServicio lineaPedidoServicioBE, ref  int error, ref  string mensajeError)
        {
            try
            {
                SqlCommand comando = new SqlCommand("select archivo, nomArchivo  from LINEAPEDIDOVENTASERVICIO  where idLineaPedidoVentaServicio= " + lineaPedidoServicioBE.Id, ConnectionManager.getConnection());
                SqlDataReader lineaPedVentServRDR = comando.ExecuteReader();
                if (lineaPedVentServRDR.HasRows)
                {
                    lineaPedVentServRDR.Read();
                    if (lineaPedVentServRDR["archivo"] != DBNull.Value)
                    {
                        lineaPedidoServicioBE.NomArchivo = Convert.ToString(lineaPedVentServRDR["nomArchivo"]);
                        lineaPedidoServicioBE.Archivo = (byte[])lineaPedVentServRDR["archivo"];
                    }
                    else
                    {
                        error = 2;
                        mensajeError = "No existe un archivo adjunto a la lineaServicio que descargar.";
                    }
                    lineaPedVentServRDR.Close();
                }
            }
            catch (Exception e)
            {
                error = 1;
                mensajeError = e.Message;
            }
        }



	}
}
